<?php
namespace App\services;

use Elasticsearch\ClientBuilder;
use Illuminate\Support\Facades\Log;
use Illuminate\Contracts\Redis;
class Es {

    //定义一个属性保存实例化的返回对象
    protected $client;

    //每次实例化类时 首先执行构造方法
    public function __construct()
    {
        $hosts = [
            //在config  获取配置信息
            config('es.host') // Different credentials on different host
        ];

        $client = ClientBuilder::create()
            ->setHosts($hosts)
            ->build();
        $this->client=$client;
    }

    public function addEsData($IndexName,$indexData=[]){

        try {
            $dates = [
                'index' => $IndexName,
                'id'    => $indexData['id'],
                'body'  => $indexData
            ];

            //本模型 实例化时 已经在构造方法获取了当前di'xdi'x
        $res = $this->client->index($dates);
            if ($res){
                // 如果同步成功要写日志
                Log::info($indexData['id']."的 数据同步Es 成功");
            }

        }catch (\Exception $e){
            //如果数据同步失败记录id 放在队列里 然后消费者监听队列
            // 这要队列有这个数据 就消费

            //此处为 伪代码 不好使
            $redis= new Redis();
            $redis->rPush('fang_list',$indexData['id']);

            //通过  任务调度 消费信息
        }

    }

        /*
         * 创建Es索引
         */
       public function createEsIndex($params){

           try {
               $response = $this->client->indices()->create($params);
               if ($response){
                   // 如果同步成功要写日志
                   Log::info($params['index']."的 索引创建成功");
               }

               return ['error_code'=>0,'data'=>$response,'msg'=>'success'];
           }catch (\Exception $exception){

               return ['error_code'=>0,'daat'=>$response,'msg'=>'fial'];
           }

       }

       public function esGetDoc(){



       }

}
